package com.gitee.sop.sopauth.auth;

import com.alibaba.fastjson.JSONObject;
import com.gitee.sop.mongodb.MongoDTO;
import com.gitee.sop.mongodb.MongoDbResult;

/**
 * @author admin
 */
public interface OAuth2Service {

    /**
     * oauth2授权,获取token
     * 登录/注册
     *
     * @param authParam  请求参数
     * @param authConfig 配置
     * @return 返回响应内容
     */
    FetchTokenResult authorize(FetchTokenParam authParam, OAuth2Config authConfig);

    /**
     * 仅登录
     *
     * @param authParam  请求参数
     * @param authConfig 配置
     * @return 返回响应内容
     */
    FetchTokenResult simpleLogin(FetchTokenParam authParam, OAuth2Config authConfig);

    /**
     * 仅注册
     *
     * @param authParam  请求参数
     * @param authConfig 配置
     * @return 返回响应内容
     */
    FetchTokenResult simpleRegister(FetchTokenParam authParam, OAuth2Config authConfig);

    /**
     * 通过token获取用户信息
     *
     * @param accessToken 用户token
     * @return
     */
    OpenUser getInfo(String accessToken);

    /**
     * 分页查询
     *
     * @param mongoDTO 查询参数
     * @return
     */
    MongoDbResult queryPageByParam(MongoDTO mongoDTO);

    /**
     * 查询指定用户信息
     *
     * @param userUuid 用户uuid
     * @return
     */
    JSONObject searchOne(String userUuid);

    /**
     * 修改指定用户状态（用户）
     *
     * @param userUuid 用户uuid
     * @param status   待修改用户状态
     */
    void updateOne(String userUuid, String status);

    /**
     * 删除指定用户信息
     *
     * @param userUuid 用户uuid
     */
    void deleteOne(String userUuid);
}
